package cz.muni.fi.pa036.kiss.daoimpl;

import cz.muni.fi.pa036.kiss.Entity.Kolej;
import cz.muni.fi.pa036.kiss.Entity.Pokoj;
import cz.muni.fi.pa036.kiss.dao.PokojDAO;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

public class PokojDAOImpl implements PokojDAO{

    @PersistenceContext
    private EntityManager em;

    public void setEntityManager(EntityManager em) {
        this.em = em;
    }
    @Override
    public void createPokoj(Pokoj pokoj) {
        if (pokoj == null) {
            throw new IllegalArgumentException("pokoj is null");
        }
        if (pokoj.getId() != null) {
            throw new IllegalArgumentException("pokoj.id is not null");
        }

        em.persist(pokoj);
    }

    @Override
    public Pokoj getPokojById(Long id) {
        if (id == null) {
            throw new IllegalArgumentException("null id");
        }
        Pokoj pokoj = em.find(Pokoj.class, id);
        return pokoj;
    }

    @Override
    public Pokoj getPokojByNumber(int cislo, Kolej kolej) {
        if (cislo < 1) {
            throw new IllegalArgumentException("null cislo");
        }
        if (kolej == null) {
            throw new IllegalArgumentException("null id");
        }
        Long kolej_id = kolej.getId();
        Query query = em.createQuery("SELECT c FROM Pokoj c WHERE c.cislo_pokoje = cislo AND c.kolej.id = kolej_id");
        List<Pokoj> results = query.getResultList();

        Pokoj pokoj = results.get(0);
        return pokoj;
    }

    @Override
    public void updatePokoj(Pokoj pokoj) {
        if (pokoj == null) {
            throw new IllegalArgumentException("pokoj is null");
        }
        if (pokoj.getId() == null) {
            throw new IllegalArgumentException("pokoj.id is null");
        }
        
        em.merge(pokoj);
    }

    @Override
    public void removePokoj(Pokoj pokoj) {
        if (pokoj == null) {
            throw new IllegalArgumentException("pokoj is null");
        }
        if (pokoj.getId() == null) {
            throw new IllegalArgumentException("pokoj.id is null");
        }
        Pokoj c = em.find(Pokoj.class, pokoj.getId());
        em.remove(c);
    }

    @Override
    public List<Pokoj> findAll() {
        Query query = em.createQuery("SELECT c FROM Pokoj c");
        List<Pokoj> results = query.getResultList();

        return results;
    }
    
}
